package com.g4.shoppingback.mapper;

import com.g4.shoppingback.pojo.DdUsersInfo;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.*;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Service;
import org.apache.ibatis.annotations.Select;

import java.util.List;

@Mapper
public interface DdUsersInfoMapper extends BaseMapper<DdUsersInfo> {

    /**
     * 用户登陆查询
     * @param username 用户名
     * @return 用户信息
     */
    @Select("select * from dd_users_info where user_name=#{username}")
    DdUsersInfo selectUser(String username);

    /**
     * 用户权限查询
     * @param id 用户id
     * @return 权限列表
     */
    @Select("select p.permit from user_role ur,role_permission rp,permission p "+
            "WHERE ur.role_id=rp.role_id AND rp.permission_id=p.id AND ur.user_id=#{id}")
    List<String> selectPermissions(Integer id);

    /**
     * 根据id查询用户
     * @param id 传入用户id
     * @return 返回单个用户信息
     */
    @Select("select * from dd_users_info where id=#{id}")
    DdUsersInfo selectUserById(Integer id);

    /**
     * 根据分页信息或用户名查询用户
     * @param username 用户名关键字
     * @param pageStart 起始页数
     * @param pageSize 每页条数
     * @return 返回分页用户信息
     */
    List<DdUsersInfo> selectUserByPaged(@Param("username") String username,
                                        @Param("pageStart") Integer pageStart,
                                        @Param("pageSize") Integer pageSize);

    /**
     * 查询用户数量
     * @param username 可能包含的关键字
     * @return 总条数
     */
    Long selectTotal(String username);

    /**
     * 根据用户id删除用户
     * @param id 用户id
     * @return 返回影响行数
     */
    @Delete("delete from dd_users_info where id=#{id}")
    int deleteUserById(Integer id);

    /**
     * 校验用户名是否重复
     * @param username 用户名
     * @return 返回用户名
     */
    @Select("select user_name from dd_users_info where user_name=#{username}")
    List<String> checkName(String username);

    /**
     * 校验电话是否重复
     * @param telephone 电话
     * @return 返回电话
     */
    @Select("select telephone from dd_users_info where telephone=#{telephone}")
    List<String> checkPhone(String telephone);

    /**
     * 修改用户信息
     * @param ddUsersInfo
     * @return 返回影响行数
     */
    int updateUser(DdUsersInfo ddUsersInfo);

    /**
     * 修改用户密码
     * @param id 用户id
     * @param newPassword 新密码
     * @return 返回影响行数
     */
    @Update("update dd_users_info set password=#{newPassword} where id=#{id}")
    int updatePassword(@Param("id") Integer id,
                       @Param("newPassword") String newPassword);
}
